<?php
namespace library;

use idea\mvc\Action;
use idea\ap\Ap;
use idea\ap\UserIdentity;
use helper\Util;
use helper\ErrorNo;
use helper\ErrorMsg;

/**
 * BaseAction abstract class file
 * 本项目Action基类
 * @author 宋欢 <iphper@yeah.net>
 * @version $Id: BaseAction.php 1 2013-04-05 01:08:06Z huan.song $
 * @package library
 * @since 1.0
 */
abstract class BaseAction extends Action
{
	/**
	 * @var boolean 是否需要检查用户的登录状态，默认检查
	 */
	protected $_checkLogin = true;
	
	/**
	 * @var boolean 是否需要检查用户的权限，默认检查
	 */
	protected $_checkAuth = true;
	
	/**
	 * (non-PHPdoc)
	 * @see idea\mvc.Action::preRun()
	 */
	public function preRun()
	{
		if ($this->_checkLogin) {
			$checkLogin = $this->checkLogin();
			if (!$checkLogin) {
				return false;
			}
			
			if ($this->_checkAuth) {
				$checkAuth = $this->checkAuth();
				if (!$checkAuth) {
					return false;
				}
			}
		}
		
		return true;
	}
	
	/**
	 * 检查用户是否登录，如果没有登录，跳转到登录页面
	 * @return boolean
	 */
	public function checkLogin()
	{
		if (!UserIdentity::isLogin()) {
			$params = array(
				'continue' => Ap::getRequest()->getRequestUri(),
			);
			Util::forward('login', 'show', 'admin', $params);
			return false;
		}

		return true;
	}
	
	/**
	 * 检查用户是否有权限，如果没有权限，跳转到登录页面
	 * @return boolean
	 */
	public function checkAuth()
	{
		$id = UserIdentity::getId();
		if (Util::getForm('Admins', 'admin')->hasAuthById($id)) {
			return true;
		}

		$errNo = ErrorNo::ERROR_NO_AUTH;
		$errMsg = ErrorMsg::ERROR_NO_AUTH;
		$params = array(
			'continue' => Ap::getRequest()->getRequestUri(),
			'err_no' => $errNo,
			'err_msg' => $errMsg
		);
		Util::forward('login', 'show', 'admin', $params);
		return false;
	}
}
